package redis

import (
	"context"
	"fmt"
	"less_day/internal/config"
	"time"
	
	"github.com/redis/go-redis/v9"
)

var RDB *redis.Client

func InitRedis(cfg config.RedisConfig) *redis.Client {
	rdb := redis.NewClient(&redis.Options{
		Addr:     fmt.Sprintf("%s:%d", cfg.Host, cfg.Port),
		Password: cfg.Password,
		DB:       cfg.DB,
	})
	
	// 测试连接
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	
	if _, err := rdb.Ping(ctx).Result(); err != nil {
		fmt.Printf("Failed to connect to Redis: %v\n", err)
	} else {
		fmt.Println("Redis connected successfully")
	}
	
	RDB = rdb
	return rdb
}

func GetRedis() *redis.Client {
	return RDB
}

func CloseRedis() error {
	if RDB != nil {
		return RDB.Close()
	}
	return nil
}

func Set(ctx context.Context, key string, value interface{}, expiration time.Duration) error {
	return RDB.Set(ctx, key, value, expiration).Err()
}

func Get(ctx context.Context, key string) (string, error) {
	return RDB.Get(ctx, key).Result()
}

func Del(ctx context.Context, key string) error {
	return RDB.Del(ctx, key).Err()
}

func Exists(ctx context.Context, key string) (bool, error) {
	count, err := RDB.Exists(ctx, key).Result()
	return count > 0, err
}